.\" -*- nroff -*-
.\"
.\" copyright (C) 1997 Stephen Williams <steve@icarus.com>
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.TH init_module 9 "$Date:$" "Linux DDI" "Kernel Functions"
.\"
.\" Turn off hyphenation and right justification for the first sections.
.hlm 0
.na
.\" The name should be formatted this way for apropos to work
.SH NAME
init_module, cleanup_module \- module load and unload functions
.\"
.\"
.SH SYNOPSIS
.B #include <linux/module.h>
.br
.B #include <linux/modversions.h>
.sp
.BI "int init_module(void);"
.br
.BI "void cleanup_module(void);"
.HP
.\"
.\" Turn hyphenation and adjustment back on.
.hlm 1
.ad
.SH DESCRIPTION
These functions are not part of the kernel but entry points into
loadable modules. These are the only symbols that must be externally
defined in order to load a module into a running kernel.
.PP
When a module is loaded into a running kernel, the
.BR init_module "(9)"
function within that object file is called to set up the module. The
implementation of that function initializes local features and
uses functions such as
.BR register_chrdev "(9)"
to attach itself to the kernel. It then returns zero(0) if it
succeeds. If there is a problem or the module decides that it cannot
be loaded, it returns instead an error code (i.e.
.IR -ENODEV )
and the kernel releases the module again.
.PP
Once loaded, the
.BR cleanup_module "(9)"
function of a module is used by the kernel to remove the module
again. The module detaches itself from the kernel and returns.
.SH "RETURN VALUE"
The
.BR init_module "(9)"
function returns 0 on success, or an error code <0 if the module
cannot be initialized.
.SH AVAILABILITY
Linux 1.0+
.SH "SEE ALSO"
.hlm 0
.na
.BR MOD_INC_USE_COUNT "(9), " insmod "(1)"
.ad
.hlm 1
.PP
Also list some source files for the
kernel that implement the functions of the page.
.SH AUTHOR
Stephen Williams <steve@icarus.com>
.SH BUGS
It is entirely up to the driver to be sure it is detached from the
kernel when unloaded. If a module makes an error in this regard, bad
things may happen.
